/**
 * 弹窗表格类
 * self
 * dialog 弹窗
 * tableData 数组
 * singleSelectTable 单选存储数组
 * multipleSelectTable  多选存储数组
 * pageData 表格分页
 * @handleSingleSelect 处理表格单选
 * @handleMultipleSelect 处理表格多选
 * @handleSingleDel 处理删除一条表格数据
 * @handleMultipleDel 处理删除多条表格数据
 * @handleMultipleConfirm 处理多选确认
 * @handleSearch 处理表格搜索
 * @isSelect 弹窗点击确定时判断是否已经作出列表选择
 * @getRowKeys 表格翻页多选
 */
export function TableHandle() {

    let self = this
    self.dialog = false
    self.tableData = []
    self.singleSelectTable = []
    self.multipleSelectTable = []
    self.pageData = {
        pageSize: 20,
        currentPage: 1,
        totalItems: 0,
        pageSizeArr: [5, 10, 20]
    }

    /**
     * 处理表格单选
     */
    self.handleSingleSelect = function(val) {
        if(val) {
            self.singleSelectTable = val
        } else {
            self.singleSelectTable = []
        }
    }

    /**
     * 处理表格多选
     */
    self.handleMultipleSelect = function(val) {
        if(val) {
            self.multipleSelectTable = val
        } else {
            self.multipleSelectTable = []
        }
    }

    /**
     * 处理删除一条表格数据
     */
    self.handleSingleDel = function(index) {
        self.tableData.splice(index, 1);
    }

    /**
     * 处理删除多条表格数据
     */
    self.handleMultipleDel = function() {
        self.tableData = self.tableData.filter(function(item) {
            return self.multipleSelectTable.indexOf(item) == -1;
        })
    }

    /**
     * 处理多选确认，根据key值进行去重
     * oldData 合并前数组已有对数据
     * key 做去重处理对key值，不同业务key值可能不同
     */
    self.handleMultipleConfirm = function(oldData, key) {
        let newData = []
        oldData = oldData.concat(JSON.parse(JSON.stringify(self.multipleSelectTable)))
        oldData.forEach(cur => {
            if(!(newData.some(i => i[key] == cur[key]))) {
                newData.push(cur)
            }
        })
        return newData
    }

    /**
     * 处理表格搜索
     * func 搜索调用的api
     * pageObj 表格的分页对象
     */
    self.handleSearch = function(func, pageObj) {
        func.call(null, pageObj.pageSize, 1)
    }

    /**
     * 弹窗点击确定时判断是否已经作出列表选择，返回true或false
     * 不能和点击确认按钮的处理方法写在一起，因为有可能会对数据做预处理
     * type 1:列表单选，2:列表多选
     * vm 绑定this，调用框架$message方法
     * text $message提示语
     */
    self.isSelect = function(type, vm, text="请先选择!") {
        if(type === 1) {
            if(self.singleSelectTable.length === 0) {
                vm.$message.error(text)
                return false
            }
        } else if(type === 2) {
            if(self.multipleSelectTable.length === 0) {
                vm.$message.error(text)
                return false
            }
        }
        return true
    }

    /**
     * 表格翻页多选
     */
    self.getRowKeys = function(row) {
        return row.id
    }
}
